package org.filetransfer.file_transfer_java_backend.utils;
import java.io.IOException;
import java.nio.file.FileVisitResult;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.SimpleFileVisitor;
import java.nio.file.attribute.BasicFileAttributes;
public class DirectorySizeCalculatorNIO {
    /**
     * 使用 NIO 计算目录的总大小
     *
     * @param directory 目标目录
     * @return 目录的总大小（字节）
     * @throws IOException 如果访问文件或目录时出错
     */
    public static long getDirectorySize(Path directory) throws IOException {
        // 使用 Files.walkFileTree 遍历文件树
        final long[] size = {0}; // 使用数组存储总大小（因 Lambda 需要 final 或 effectively final 变量）
        Files.walkFileTree(directory, new SimpleFileVisitor<>() {
            @Override
            public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) {
                size[0] += attrs.size(); // 累加文件大小
                return FileVisitResult.CONTINUE;
            }
            @Override
            public FileVisitResult visitFileFailed(Path file, IOException exc) {
                System.err.println("无法访问文件: " + file + " - " + exc.getMessage());
                return FileVisitResult.CONTINUE;
            }
        });
        return size[0];
    }
}
